/*******************************************************************************
 * Copyright (c) 2018.
 * This file was written by Fancyears·Milos·Malvis @connor. Any question/bug you can't post to 1243093366@qq.com.
 * ALL RIGHTS RESERVED.
 ******************************************************************************/
package org.fancyears.commom;

/**
 * 界面初始化控制接口，作为窗口初始化的规范，每一个窗口都将采用一个单独的线程去跑而不影响主线程
 * 
 * @author: Fancyears·Milos·Malvis
 * @CreateDate: 2018年12月3日 下午4:15:46
 * @Description:
 */
public interface Initializer extends Runnable {
	/**
	 * 初始化一些属性，具体按照窗口样式去初始化Dialog、Button等信息
	 * 
	 * <strong>该方法必须实现和重写</strong>
	 * 
	 * @return
	 * @throws Exception
	 */
	boolean init() throws Exception;

	/**
	 * 创建内容，作为绘制窗口内容的操作方法，由实际页面实现该方法
	 * 
	 * <strong>该方法必须实现和重写</strong>
	 * 
	 * @throws Exception
	 */
	void createContents() throws Exception;

	/**
	 * 显示窗口
	 * 
	 * 如果继承了{@link Initialization}或者{@link InitializationWithSkin}，则不用一定实现该方法
	 * 其基类有默认的defualtShow()方法实现，自动将窗口居中
	 *
	 * @throws Exception
	 */
	void show() throws Exception;

}
